/*
 * UVa 202
 * 循环小数
 */
// 输入整数 a 和 b（0 <= a <= 3000, 1 <= b <= 3000），
// 输出 a/b 的循环小数表示以及循环节长度。
// 例如 a = 5, b = 43，
// 小数表示为 0.(116279069767441860465)，
// 循环节长度为 21。
// 如果循环节超过 50 位，就在第 50 位后打省略号。
/*
样例输入:
76 25
5 43
1 397
样例输出:
76/25 = 3.04(0)
   1 = number of digits in repeating cycle

5/43 = 0.(116279069767441860465)
   21 = number of digits in repeating cycle

1/397 = 0.(00251889168765743073047858942065491183879093198992...)
   99 = number of digits in repeating cycle
*/

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#define LOCAL
using namespace std;
vector<int> mod;                   // 存每次除法过程产生的余数
const string digits("0123456789"); // 数字 "0123456789"
int main()
{
#ifdef LOCAL
    ifstream cin("in.txt");
    ofstream cout("out.txt");
#endif
    int a, b;
    while (cin >> a >> b)
    {
        mod.clear();
        int len = 0;    // 循环节长度
        string decimal; // 循环小数
        cout << a << '/' << b << " = ";
        // 模拟除法过程
        // 1.a/b 的结果尾插 decimal，
        // 2.a%b 的结果尾插 mod，
        // 3.如果 a%b == 0 或者 a%b 在 mod 中已经出现，则循环节确定；
        //   否则 a %= b, a *= 10。
        // 重复 1~3
        decimal.push_back(digits[a / b]);
        decimal.push_back('.');
        while (a %= b)
        {
            // 判断当前余数是否在 mod 中已经存在
            size_t index = 0; // 下标
            while (index != mod.size() && mod[index] != a)
                ++index;
            if (index == mod.size())
            {
                // 余数没有重复出现
                mod.push_back(a);
                a *= 10;
                decimal.push_back(digits[a / b]);
            }
            else
            {
                // 余数重复出现了
                len = mod.size() - index;
                decimal.insert(index + 2, "(");
                if (len <= 50)
                    decimal.push_back(')');
                else
                    // 循环节超过 50 位，就在第 50 位后打省略号。
                    decimal.replace(decimal.cbegin() +
                                        2 +
                                        index +
                                        1 +
                                        50,
                                    decimal.cend(),
                                    "...)");
                break;
            }
        }
        if (a == 0)
        {
            // a / b 不是无限小数
            decimal.append("(0)");
            len = 1;
        }
        // 输出
        cout << decimal << '\n'
             << "   " << len << " = number of digits in repeating cycle\n"
             << endl;
    }
    return 0;
}

// another passed answer
// #include <iostream>
// #include <vector>
// using namespace std;
// int main()
// {
//     freopen("in.txt", "r", stdin);
//     freopen("out.txt", "w", stdout);
//     int a, b;
//     while (cin >> a >> b)
//     {
//         int stored_a = a, stored_b = b;
//         int counter[30010] = {0};
//         if (a > b)
//             a -= (a / b) * b;
//         vector<int> num;
//         int k = 1, j = 0;
//         while (true)
//         {
//             a *= 10;
//             num.push_back(a / b);
//             if (counter[a])
//             {
//                 cout << stored_a << "/" << stored_b << " = " << stored_a / stored_b << ".";
//                 for (int i = 0; i < counter[a] - 1 && stored_a != stored_b; i++, j++)
//                     cout << num[i];
//                 cout << "(";
//                 for (int i = counter[a] - 1; i < k - 1 && j <= 49; i++, j++)
//                 {
//                     cout << num[i];
//                     if (j >= 49 && i != k - 2)
//                     {
//                         cout << "...";
//                         break;
//                     }
//                 }
//                 cout << ")" << endl;
//                 cout << "   " << k - counter[a] << " = number of digits in repeating cycle" << endl
//                      << endl;
//                 break;
//             }
//             else
//                 counter[a] = k;
//             a %= b;
//             k++;
//         }
//     }
// }